﻿using System;
using System.ServiceModel;
using Ayatta.Contract.Domain;
using System.Collections.Generic;

namespace Ayatta.Contract
{
    [ServiceContract(Namespace = ServiceContract.Namespace)]
    public interface IAccountService : IService
    {

        #region Account

        [OperationContract]
        Account AccountGet(int id);

        [OperationContract]
        PagedList<Account> AccountPagedList(int page = 1, int size = 20);

        #endregion

        #region AccountDetailMoney

        [OperationContract]
        bool AccountDetailMoneyCreate(AccountDetailMoney o);

        [OperationContract]
        bool AccountDetailMoneyUpdate(AccountDetailMoney o);

        [OperationContract]
        bool AccountDetailMoneyDelete(int id);

        [OperationContract]
        AccountDetailMoney AccountDetailMoneyGet(int id);

        [OperationContract]
        IList<AccountDetailMoney> AccountDetailMoneyList();

        [OperationContract]
        PagedList<AccountDetailMoney> AccountDetailMoneyPagedList(int page = 1, int size = 40, int? userId = null, bool? flow = null, int? group = null, DateTime? beninDate = null, DateTime? endDate = null);
        
        #endregion

        #region AccountDetailCoin

        [OperationContract]
        bool AccountDetailCoinCreate(AccountDetailCoin o);

        [OperationContract]
        bool AccountDetailCoinUpdate(AccountDetailCoin o);

        [OperationContract]
        bool AccountDetailCoinDelete(int id);

        [OperationContract]
        AccountDetailCoin AccountDetailCoinGet(int id);

        [OperationContract]
        IList<AccountDetailCoin> AccountDetailCoinList();

        [OperationContract]
        PagedList<AccountDetailCoin> AccountDetailCoinPagedList(int page = 1, int size = 20);

        #endregion

        #region AccountDetailIntegral

        [OperationContract]
        bool AccountDetailIntegralCreate(AccountDetailIntegral o);

        [OperationContract]
        bool AccountDetailIntegralUpdate(AccountDetailIntegral o);

        [OperationContract]
        bool AccountDetailIntegralDelete(int id);

        [OperationContract]
        AccountDetailIntegral AccountDetailIntegralGet(int id);

        [OperationContract]
        IList<AccountDetailIntegral> AccountDetailIntegralList();

        [OperationContract]
        PagedList<AccountDetailIntegral> AccountDetailIntegralPagedList(int page = 1, int size = 50, int? userId = null, bool? flow = null, int? group = null);

        #endregion

        #region AccountDetailGame

        [OperationContract]
        bool AccountDetailGameCreate(AccountDetailGame o);

        [OperationContract]
        bool AccountDetailGameUpdate(AccountDetailGame o);

        [OperationContract]
        bool AccountDetailGameDelete(int id);

        [OperationContract]
        AccountDetailGame AccountDetailGameGet(int id);

        [OperationContract]
        IList<AccountDetailGame> AccountDetailGameList();

        [OperationContract]
        PagedList<AccountDetailGame> AccountDetailGamePagedList(int page = 1, int size = 20);

        #endregion
    
    
        #region RechargePackage

        [OperationContract]
        bool RechargePackageCreate(RechargePackage o);

        [OperationContract]
        bool RechargePackageUpdate(RechargePackage o);

        [OperationContract]
        bool RechargePackageDelete(int id);

        [OperationContract]
        RechargePackage RechargePackageGet(int id);

        [OperationContract]
        IList<RechargePackage> RechargePackageList(bool? status = null);

        [OperationContract]
        PagedList<RechargePackage> RechargePackagePagedList(int page = 1, int size = 20);

        #endregion

        #region RechargePackageRequirement

        [OperationContract]
        bool RechargePackageRequirementCreate(RechargePackageRequirement o);

        [OperationContract]
        bool RechargePackageRequirementUpdate(RechargePackageRequirement o);

        [OperationContract]
        bool RechargePackageRequirementDelete(int id);

        [OperationContract]
        RechargePackageRequirement RechargePackageRequirementGet(int id);

        [OperationContract]
        IList<RechargePackageRequirement> RechargePackageRequirementList();

        [OperationContract]
        PagedList<RechargePackageRequirement> RechargePackageRequirementPagedList(int page = 1, int size = 20);

        #endregion

        #region PaymentPlatform

        [OperationContract]
        bool PaymentPlatformCreate(PaymentPlatform o);

        [OperationContract]
        bool PaymentPlatformUpdate(PaymentPlatform o);

        [OperationContract]
        bool PaymentPlatformDelete(int id);

        [OperationContract]
        PaymentPlatform PaymentPlatformGet(int id);

        [OperationContract]
        IList<PaymentPlatform> PaymentPlatformList(bool? status = null);

        #endregion

        #region PaymentBank

        [OperationContract]
        bool PaymentBankCreate(PaymentBank o);

        [OperationContract]
        bool PaymentBankUpdate(PaymentBank o);

        [OperationContract]
        bool PaymentBankDelete(int id);

        [OperationContract]
        PaymentBank PaymentBankGet(int id);

        [OperationContract]
        IList<PaymentBank> PaymentBankList();

        [OperationContract]
        PagedList<PaymentBank> PaymentBankPagedList(int page = 1, int size = 20);

        #endregion

        #region PaymentEBank

        [OperationContract]
        bool PaymentEBankCreate(PaymentEBank o);

        [OperationContract]
        bool PaymentEBankUpdate(PaymentEBank o);

        [OperationContract]
        bool PaymentEBankDelete(int id);

        [OperationContract]
        PaymentEBank PaymentEBankGet(int id);

        [OperationContract]
        IList<PaymentEBank> PaymentEBankList(bool rich = false, int? platformId = null);

        [OperationContract]
        PagedList<PaymentEBank> PaymentEBankPagedList(int page = 1, int size = 20);

        #endregion

        #region AccountRecharge

        [OperationContract]
        bool AccountRechargeCreate(AccountRecharge o);

        [OperationContract]
        bool AccountRechargeUpdate(AccountRecharge o);

        [OperationContract]
        bool AccountRechargeDelete(string id);

        [OperationContract]
        AccountRecharge AccountRechargeGet(string id);

        [OperationContract]
        IList<AccountRecharge> AccountRechargeList();

        [OperationContract]
        PagedList<AccountRecharge> AccountRechargePagedList(int page = 1, int size = 20);

        [OperationContract]
        int AccountRechargeCountGet(int userId, int? packageId = null, byte? category = null, bool? status = null);

        #endregion

        #region AccountPayment

        [OperationContract]
        bool AccountPaymentCreate(AccountPayment payment);

        [OperationContract]
        bool AccountPaymentRechargeCreate(AccountRecharge recharge, AccountPayment payment);

        [OperationContract]
        bool AccountPaymentRechargeStatusUpdate(string paymentId, string rechargeId, DateTime paidOn, string externalNo);

        [OperationContract]
        bool AccountPaymentOrderPayByEBank(string id, DateTime paidOn, string externalNo);

        [OperationContract]
        bool AccountPaymentDelete(string id);

        [OperationContract]
        AccountPayment AccountPaymentGet(string id);

        [OperationContract]
        IList<AccountPayment> AccountPaymentList();

        [OperationContract]
        PagedList<AccountPayment> AccountPaymentPagedList(int page = 1, int size = 20);

        #endregion

        #region AccountPaymentLog

        [OperationContract]
        bool AccountPaymentLogCreate(AccountPaymentLog o);

        [OperationContract]
        AccountPaymentLog AccountPaymentLogGet(int id);

        [OperationContract]
        PagedList<AccountPaymentLog> AccountPaymentLogPagedList(int page = 1, int size = 20);

        #endregion
    
    }
}
